<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Document</title>
    <style></style>
  </head>
  <body>
    <div>
      <h1>JavaScript中的垃圾回收</h1>
      <div>
        <h1>JavaScript中的垃圾</h1>
        <p>1.JavaScript中内存管理是自动的</p>
        <p>2.对象不再被引用时是垃圾</p>
        <p>3.对象不能从根上访问到时是垃圾</p>
      </div>
      <div>
        <h2>可达</h2>
        <p>在一个作用域链上,只要提供根可以有路径查找到的对象都是可达对象</p>
        <p>1.可以访问到的对象就是可达对象(引用，作用域链)</p>
        <p>2.可达的标准就是从根出发是否能够被找到</p>
        <p>3.JavaScript中的根就是可以理解为是全局变量对象||</p>
      </div>
    </div>
    <script>
      //JavaScript中的引用和可达
      //{}对象空间被obj引用,同时可以访问到obj,所以是可达的
      //   let obj = { name: "xjq" };
      //此时ali也引用对象,即使下面obj=null.该对象也是可达的
      //   let ali = obj;
      //   obj = null;

      //下面的代码是相互引用关系,如果断了o1和prev引用obj1的话  那么obj1就会被当成垃圾被回收
      function objGroup(obj1, obj2) {
        //obj1的next引用了obj2
        obj1.next = obj2;
        //obj2的prve引用了obj1
        obj2.prev = obj1;

        return {
          // o1引用了obj1
          o1: obj1,
          // o2引用了obj2
          o2: obj2,
        };
      }
      // obj引用了objGroup
      let obj = objGroup({ name: "obj1" }, { name: "obj2" });
      console.log(obj);
    </script>
  </body>
</html>
